package com.fast.fast.common.base.constant.enums;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * Http状态枚举
 *
 * @author lyf
 * @date 2022/01/01 00:00 周六
 **/
@Getter
@RequiredArgsConstructor
public enum HttpStatusEnum {

    /**
     * 成功
     */
    OK(200, "成功"),

    /**
     * 请求参数无效
     */
    BAD_REQUEST(400, "请求参数无效"),

    /**
     * 请求体为空
     */
    REQUEST_BODY_IS_MISSING(400, "请求体不能为空,并检查请求体格式是否正确"),

    /**
     * 未登录
     */
    UNAUTHENTICATED(401, "未登录"),

    /**
     * 无访问权限
     */
    FORBIDDEN(403, "无访问权限"),

    /**
     * 找不到资源
     */
    NOT_FOUND(404, "找不到资源"),

    /**
     * 请求方法不被允许
     */
    METHOD_NOT_ALLOWED(405, "请求方法不被允许"),

    /**
     * 不支持的媒体类型(请检查Content-type)
     */
    UNSUPPORTED_MEDIA_TYPE(415, "不支持的媒体类型(请检查Content-type)"),

    /**
     * 服务器内部错误
     */
    INTERNAL_SERVER_ERROR(500, "服务器内部错误"),

    /**
     * 服务暂时不可用
     */
    SERVICE_UNAVAILABLE(503, "服务暂时不可用"),

    /**
     * 网关超时
     */
    GATEWAY_TIMEOUT(504, "网关超时");

    /**
     * 状态码
     */
    private final Integer code;

    /**
     * 提示信息
     */
    private final String msg;

    /**
     * 通过状态码获取枚举对象
     *
     * @param code 状态码
     * @return 枚举对象
     */
    public static HttpStatusEnum getByCode(Integer code) {
        for (HttpStatusEnum value : HttpStatusEnum.values()) {
            if (code.equals(value.getCode())) {
                return value;
            }
        }
        return null;
    }

    /**
     * 通过状态码获取提示信息
     *
     * @param code 状态码
     * @return 提示信息
     */
    public static String getMsgByCode(Integer code) {
        for (HttpStatusEnum value : HttpStatusEnum.values()) {
            if (code.equals(value.getCode())) {
                return value.getMsg();
            }
        }
        return null;
    }

}
